﻿using System;

[Serializable]
public abstract class Encapsulado
{
    #region Atributos de la clase

    protected ulong id;

    #endregion

    #region Métodos de acceso

    protected ulong getId()
    {
        return this.id;
    }
    protected void setId(ulong pId)
    {
        this.id = pId;
    }

    #endregion

    #region Propiedades públicas

    virtual public ulong Id
    {
        get { return this.id; }
    }

    #endregion

    #region Constructores

    /**
        * \brief Constructor de la clase Encapsulado. No implementado
        */
    public Encapsulado(ulong pId)
    {
        this.setId(pId);
    }

    /**
    * \brief Constructor de copia de la clase Encapsulado.
    * \param pEncapsulado - objeto Encapsulado sobre el que realizar la copia
    * \return Objeto encapsulado.
    */
    protected Encapsulado(Encapsulado pEncapsulado)
    {
        this.setId(pEncapsulado.Id);
    }

    #endregion      

    #region Métodos Adicionales

    public override abstract string ToString();
    public override abstract int GetHashCode();
    internal abstract Encapsulado dameCopiaEncapsulado();
    internal abstract void restaurarEncapsulado(Encapsulado pEncapsulado);

    #endregion        
}
